package com.easy.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.easy.common.core.domain.entity.User;
import com.easy.common.core.domain.model.LoginBody;

/**
 * 用户 业务层 服务
 *
 * @author RuoYu
 * @date 2022/11/18
 */
public interface UserService extends IService<User> {

    /**
     * 通过 用户名 查询用户
     *
     * @param userName 用户名
     * @return {@link User}
     */
    User selectUserByUserName(String userName);

    /**
     * 通过 手机号 查询用户
     *
     * @param phone 电话
     * @return {@link User}
     */
    User selectByUserPhone(String phone);

    /**
     * 通过 电子邮件 查询用户
     *
     * @param email 电子邮件
     * @return {@link User}
     */
    User selectByUserEmail(String email);

    /**
     * 检查 用户名 是否唯一
     *
     * @param userName 用户名
     * @return {@link String}
     */
    boolean checkUserName(String userName);

    /**
     * 检查 用户电话号码 是否唯一
     *
     * @param userPhone 用户电话
     * @return {@link String}
     */
    boolean checkUserPhone(String userPhone);

    /**
     * 检查 用户电子邮件 是否唯一
     *
     * @param userEmail 用户电子邮件
     * @return {@link String}
     */
    boolean checkUserEmail(String userEmail);

    /**
     * 查询用户类型
     *
     * @param user 用户
     * @return 0：用户 1：卖家
     */
    String selectUserType(User user);
    /**
     * 检查 用户 密码是否正确
     *
     * @param userName 用户名
     * @param password 密码
     * @return boolean
     */
    boolean checkUserPassword(String userName, String password);

    /**
     * 检查 用户是否 允许操作
     *
     * @param user 登录用户
     */
    boolean checkUserAllowed(LoginBody user);

    /**
     * 更新 用户 状态
     *
     * @param user 用户
     * @return int
     */
    int updateUserStatus(User user);


    /**
     * 更新 用户 基本信息
     *
     * @param user 用户
     * @return int
     */
    int updateUserBasicInfo(User user);

    /**
     * 通过用户名更新用户密码
     *
     * @param userName    用户名
     * @param nowPassword 新密码
     * @return int
     */
    int updateUserPasswordByUserName(String userName, String nowPassword);

    /**
     * 通过电话更新用户密码
     *
     * @param phone       手机号
     * @param nowPassword 现在密码
     * @return int
     */
    int updateUserPasswordByPhone(String phone, String nowPassword);

    /**
     * 通过电子邮件更新用户密码
     *
     * @param email       邮箱号
     * @param nowPassword 现在密码
     * @return int
     */
    int updateUserPasswordByEmail(String email, String nowPassword);

    /**
     * 更新用户头像
     *
     * @param userName 用户名
     * @param avatar   《阿凡达》
     * @return boolean
     */
    boolean updateUserAvatar(String userName, String avatar);
}
